using BasecampRestAPI;

namespace TestBasecampRestAPI.TestMoveToDoList
{
	public class FakeBaseCamp : IBaseCamp
	{
		public new static FakeBaseCamp GetInstance()
		{
			return new FakeBaseCamp();
		}
		private FakeBaseCamp() : base()
		{
		}

		#region Implementation of IBasecamp

		public IRestWebService Service
		{
			get
			{
				ServiceGetCalled = true;
				return ServiceGetFakeResult;
			}
		}

		public IAccount Account
		{
			get { throw new System.NotImplementedException(); }
		}

		public bool ServiceGetCalled { get; private set; }
		public IRestWebService ServiceGetFakeResult { private get; set; }

		public IProject[] Projects
		{
			get
			{
				ProjectsGetCalled = true;
				return ProjectsGetFakeResult;
			}
		}
		public bool ProjectsGetCalled { get; private set; }
		public IProject[] ProjectsGetFakeResult { private get; set; }

		public IProject GetProjectById(int id)
		{
			GetProjectByIdCalled = true;
			GetProjectByIdLastId = id;
			return GetProjectByIdFakeResult;
		}
		public bool GetProjectByIdCalled { get; private set; }
		public int GetProjectByIdLastId { get; private set; }
		public IProject GetProjectByIdFakeResult { private get; set; }

		public IPerson GetPersonById(int id)
		{
			GetPersonByIdCalled = true;
			GetPersonByIdLastId = id;
			return GetPersonByIdFakeResult;
		}
		public bool GetPersonByIdCalled { get; private set; }
		public int GetPersonByIdLastId { get; private set; }
		public IPerson GetPersonByIdFakeResult { private get; set; }

		public ICompany[] Companies
		{
			get { throw new System.NotImplementedException(); }
		}

		public IToDoListItem GetToDoListItemById(int id)
		{
			throw new System.NotImplementedException();
		}

		public ICompany GetCompanyById(int id)
		{
			throw new System.NotImplementedException();
		}

		public ICategory GetCategoryById(int id)
		{
			GetCategoryByIdCalled = true;
			GetCategoryByIdLastId = id;
			return GetCategoryByIdFakeResult;
		}
		public bool GetCategoryByIdCalled { get; private set; }
		public int GetCategoryByIdLastId { get; private set; }
		public ICategory GetCategoryByIdFakeResult { private get; set; }

		public void DeleteCategoryById(int id)
		{
			throw new System.NotImplementedException();
		}

		public IPost GetMessageById(int id)
		{
			throw new System.NotImplementedException();
		}

		public IAttachment UploadAttachment(string filename)
		{
			throw new System.NotImplementedException();
		}

		public void DeleteMessageById(int id)
		{
			throw new System.NotImplementedException();
		}

		public IComment[] CommentsForResource(string resource, int id)
		{
			CommentsForResourceCalled = true;
			CommentsForResourceLastResource = resource;
			CommentsForResourceLastId = id;
			return CommentsForResourceFakeResult;
		}
		public bool CommentsForResourceCalled { get; private set; }
		public string CommentsForResourceLastResource { get; private set; }
		public int CommentsForResourceLastId { get; private set; }
		public IComment[] CommentsForResourceFakeResult { private get; set; }

		public IPerson CurrentPerson
		{
			get
			{
				throw new System.NotImplementedException();
			}
		}

		public IPerson[] People
		{
			get
			{
				throw new System.NotImplementedException();
			}
		}

		#endregion
	}
}